﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<title>OpenW</title>
<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../styles/styles.css">
</head>
<body>

<h1>OpenW</h1>
<div class=navbar>
<a href="../index.html">главная</a> |
<a href="index.html">экспортируемые функции</a> |
<a href="../basicapi/index.html">Basic API</a>
</div>

<div class=shortdescr>
Функция <code>OpenW</code> вызывается Far Manager'ом для запуска плагина.
</div>

<pre class=syntax>
HANDLE WINAPI OpenW(
  const struct OpenInfo *Info
);
</pre>

<h3>Параметры</h3>
<div class=descr>
  <div class=dfn>Info</div>
    <div class=dfndescr>Указатель на структуру <a href="../structures/openinfo.html">OpenInfo</a>, Far Manager передает служебную информацию об открытом плагине.<br>
    В начале функции проверьте, что поле <code>OpenInfo.StructSize >= sizeof(OpenInfo)</code>.</div>
</div>

<h3>Возвращаемое значение</h3>
<div class=descr>
<p>Eсли функция завершается успешно, то возвращаемое значение - описатель плагина. Этот описатель позже будет передаваться другим функциям плагина для того,
чтобы позволить им различать различные копии загруженного плагина. Формат и содержание описателя не важны для Far Manager'а - они могут быть, к примеру,
адресом внутреннего объекта плагина, или адресом структуры с данными плагина, или любым другим уникальным идентификатором, отличным от нуля.<br>
В случае неудачного завершения функции, возвращаемое значение должно равняться <code>NULL</code>.</p>

<p class=note><img src="../../images/note.gif" alt="Замечание для OpenW" width="10" height="10"> Внимание!</p>
<UL class=note><LI>Если значение поля <a href="../structures/openinfo.html">OpenInfo::OpenFrom</a>, принимаемое плагином, равно <code>OPEN_FROMMACRO</code>, то возвращаемое значение формируется по правилам:<br>
- Если плагин вернул <code>0</code>, макросу возвращается <code>false</code>.<br>
- Если плагин вернул <code>1</code> или <code>INVALID_HANDLE_VALUE</code>, макросу возвращается <code>true</code>.<br>
- Чтобы вернуть макросу более одной величины (или одну величину не-булевого типа), плагин должен заполнить структуру
<a href="../structures/farmacrocall.html">FarMacroCall</a> и вернуть в Far Manager указатель на эту структуру.<br>
- Если плагин хочет открыть панель, он должен поместить её описатель в начальный
  элемент массива <code>Values</code> структуры
  <a href="../structures/farmacrocall.html">FarMacroCall</a> и вернуть в Far
  Manager указатель на эту структуру. Элемент должен быть типа
  <code>FMVT_PANEL</code>. Макросу возвращается значение <code>true</code>.
</LI></UL>

</div>

<h3>Замечания</h3>
<div class=descr>
<ol>
<li>Вы можете использовать эту функцию для реализации плагинов, работающих без создания файловых панелей. Просто выполните все необходимые действия и верните <code>NULL</code>.
<li>В случае, если Far Manager вызывает данную функцию после удачного выполнения <a href="analysew.html">AnalyseW</a>, и плагин желает обработать файл без создания панели, верните <code>PANEL_STOP</code>.
<ol>
</div>

<h3>Пример</h3>
<div class=descr>
Пример из плагина "ProcList".
<pre class=code>
HANDLE WINAPI OpenW(const struct OpenInfo *OInfo)
{
  Plist* hPlugin = new Plist();

  if (OInfo->OpenFrom == OPEN_COMMANDLINE && (NORM_M_PREFIX(reinterpret_cast< LPCWSTR >(OInfo->Data))))
  {
    if (!hPlugin->Connect((wchar_t*)OInfo->Data))
    {
      delete hPlugin;
      hPlugin = nullptr;
    }
  }

  return hPlugin;
}
</pre>
</div>

</body>
</html>